﻿/*
*Tóm tắt: file này để thực hiện các nghiệp vụ biên tập slide
*thực hiện gọi các hàm ajax và trao đổi thông tin theo định dạng JSON
*Ngày tạo: 06/05/2012
*Người tạo: liemqv
*/

    var arrTrangslide = null; //Danh sách trang slide
    var resCallService = null; //Giá trị trả về khi gọi hàm trên service
    var lstSlide = $("#list-slide"); //ol danh sách slide
    var viewSlide = $("#view-slide"); //div danh sách sự kiện slide
    var videoSlide = $("#slide-video"); //div video
    var slideStatus = $("#slide-status"); //trạng thái video
    var player = null; //Đại diện cho video
    var progressbar = null; //Đại diện cho progressbar
    var interval = null; //Đại điện cho interval
    var iSelectedTrangslide = 0; //ID trang slide được chọn
    var iFK_iTrangslideIDCurrent = 0; //ID trang slide đang được chọn
    var sCallType; //Phân biệt các trường hợp gọi service để xử lý dữ liệu tương ứng
    var iSukienslideIndex = 0; //vị trí sự kiện slide được chạy
    var iLstSukienslideCount = 0; //Biến lưu số lượng sự kiện slide của một trang
    var bPause = false; //Cho biết có dừng slide không
    var isFirstPlay = true; //first click for play
    /*
    *Các biến phục vụ cho hàm CallService
    */
    var varType;
    var varUrl;
    var varData;
    var varContentType;
    var varDataType;
    var varProcessData;
    /*
    *Đối tượng điểm danh
    */
    function Diemdanh(_PK_iDiemdanhID, _FK_iKhoahocID, _FK_iHocvienID, _FK_iTrangslideID, _iTrangthai, _dThoidiemxem)
    {
        this.PK_iDiemdanhID = _PK_iDiemdanhID;
        this.FK_iKhoahocID = _FK_iKhoahocID;
        this.FK_iHocvienID = _FK_iHocvienID;
        this.FK_iTrangslideID = _FK_iTrangslideID;
        this.iTrangthai = _iTrangthai;
        this.dThoidiemxem = _dThoidiemxem;
    }
    /*
    *Hiển thị/ẩn loading
    */
    function showLoading(_show)
    {
        if(_show == true)
        {
            $(".ui-progressbar-value").css("width", "100%");
        }
        else
        {
            $(".ui-progressbar-value").css("width", "0%");
        }
    }
    /*
    *Gọi Service
    */
    function CallService()
    {
        showLoading(true); //Hiển thị loading...
        $.ajax({
            type          : varType, //GET or POST or PUT or DELETE verb
            url           : varUrl, // Location of the service
            data          : varData, //Data sent to server
            contentType   : varContentType, // content type sent to server
            dataType      : varDataType, //Expected data format from server
            processdata   : varProcessData, //True or False
            success       : function(msg) {//On Successfull service call
                ServiceSucceeded(msg);                    
            },
            error: CallService_Error// When Service call fails
        });
    }
    /*
    *Chuyển đổi định dạng json sang đối tượng, khi gọi service thành công
    */
    function ServiceSucceeded(result) {
        showLoading(false);
        resCallService = eval(result);
        switch (sCallType) {
            case "Slide":
                if(resCallService.sVideo != null)
                {
                    $('#player').attr("href", resCallService.sVideo); //Đặt lại thuộc tính href chỏ đến video cần hiển thị
                    initVideo(); //Gọi hàm cấu hình video
                }
                getTrangslideByFK_iSlideID(FK_iSlideID); //Lấy danh sách trang slide và hiển thị
                break;
            case "PageSlide":
                if(resCallService.length <=0)
                {
                    alert("Slide chưa có nội dung để hiển thị!");
                }
                else
                {
                    showListTrangslide(); //Gọi hàm hiển thị danh sách trang slide
                    initClickTrangslide(); //Khởi tạo sự kiện click vào trang slide
                    showSelectedTrangslide(0);
                    getSukienslideByFK_iTrangslideID(resCallService[0].PK_iTrangslideID); //Hiển thị slide đầu tiên
                }
                break;
            case "EventSlide":
                iLstSukienslideCount = resCallService.length; //Gán số lượng sự kiện cho biến cục bộ
                if(FK_iHocvienID > 0 && FK_iKhoahocID > 0)
                {
                    diemDanh(FK_iHocvienID, FK_iKhoahocID, iFK_iTrangslideIDCurrent); //Gửi thông tin điểm danh lên server
                }
                showSukienslide(0); //gọi hàm hiển thị danh sách sự kiện slide
                break;
            case "Diemdanh":
                break;
        }
        
    }
    /*
    *Hiển thị thông báo lỗi
    */
    function CallService_Error(xhr, ajaxOptions, thrownError) {
        showLoading(false);
        alert(xhr.responseText);
    }
    /*
    *Tóm tắt: Hàm lấy danh sách Trangslide từ server
    *Tham số FK_iSlideID: ID của Slide cần lấy danh sách trang slide
    */
    function getTrangslideByFK_iSlideID(FK_iSlideID) {
        lstSlide.text("");
        varType = "POST";
        varUrl = URL_DOTNET_SERVICE + "TrangslideGetByFK_iSlideID/" + FK_iSlideID;
        varContentType = "application/json; charset=utf-8";
        varDataType = "json";
        varProcessData = true;
        sCallType = "PageSlide";
        CallService(); //Gọi service để lấy danh sách trang slide
    }
    /*
    *Tóm tắt: Hàm lấy danh sách Sukienslide từ server theo ID trang slide
    *Tham số FK_iTrangslideID: ID của Trangslide cần lấy danh sách sự kiện slide
    */
    function getSukienslideByFK_iTrangslideID(FK_iTrangslideID) {
        viewSlide.text("");
        varType = "POST";
        varUrl = URL_DOTNET_SERVICE + "SukienslideGetByFK_iTrangslideID/" + FK_iTrangslideID;
        varContentType = "application/json; charset=utf-8";
        varDataType = "json";
        varProcessData = true;
        sCallType = "EventSlide";
        CallService(); //Gọi service để lấy danh sách trang slide
        iFK_iTrangslideIDCurrent = FK_iTrangslideID; //Đặt ID trang đang kích hoạt vào biến cục bộ
    }
    /*
    *Cấu hình hiển thị video
    */
    function initVideo()
    {
        player = $f("player", "../Plugin/flowplayer/flowplayer-3.2.11.swf", {
            // this will enable pseudostreaming support
            plugins: {
                pseudo: {
                    url: "http://releases.flowplayer.org/swf/flowplayer.pseudostreaming-3.2.9.swf"
                }
            },
            // listen to following clip events
            clip: {
                 // these two settings will make the first frame visible
                autoPlay: false,
                autoBuffering: true,
                // make this clip use pseudostreaming plugin with "provider" property
                provider: 'pseudo',

                onPause: function() {
                    slideStatus.text("Tạm dừng!");
                    bPause = true;
                    $("#play-btn").text("Chạy");
                },
 
                onResume: function() {
                    slideStatus.text("Đang chạy...");
                    bPause = false;
                    $("#play-btn").text("Tạm dừng");
                    viewSlide.text("");
                    getSukienslideByFK_iTrangslideID(arrTrangslide[iSelectedTrangslide].PK_iTrangslideID);
                },
 
                // trigger this function on the 3rd and 8th second of playback
                onCuepoint: [[3000, 8000], function(clip, point) {
                    slideStatus.innerHTML = "cuepoint: " + point;
                }]
            },
 
            // invoked when player loads (not a clip specific event)
            onLoad: function() {
                slideStatus.text("...");
            },
 
            // when playback is finished we are performing unload.
            onFinish: function() {
                slideStatus.text("Đã kết thúc.");
                this.unload();
            }
 
        });
    }
    /*
    *Hiển thị danh sách slide
    */
    function showListTrangslide(){
        arrTrangslide = resCallService;
        $.each(arrTrangslide, function(i, val) 
        {
            $("<li><div class='slide' rel='" + val.PK_iTrangslideID + "'>" + val.sTieude + "</div></li>").appendTo(lstSlide);
		});
    }
    /*
    *Hiển thị sự kiện theo index trong mảng danh sách sự kiện
    */
    function showSukienslide(_index)
    {
        var val = resCallService[_index];
        var index = _index;
        iSukienslideIndex = _index;
        if(val == null)
            return;
        val.iThoigianhienthi *= 1000; //Chuyển giây sang mili giây
        var item = $("<div style='display:none;' class='slide-item'>" + val.sNoidung + "</div>").appendTo(viewSlide);
        var bBatdaucungsukientruoc = false; //Bắt đầu cùng sự kiện trước
        if((resCallService[index + 1] != null) && (resCallService[index + 1].bBatdaucungsukientruoc == true) && (bPause == false))
        {
            bBatdaucungsukientruoc = true;
            showSukienslide(_index + 1); //Hiển thị sự kiện kế
        }
        //Hiển thị hiệu ứng tương ứng
        switch (val.FK_sDanhmucsukienbatdauID) {
            case "BIG":
                item.show();
                item.animate({
                    width: "10%",
                    fontSize: "18pt"
                }, 2000);
                setTimeout(function() {showSukienketthuc(item, val, bBatdaucungsukientruoc, _index);}, val.iThoigianhienthi);
                break;
            case "FADEIN":
                item.fadeIn(2500);
                setTimeout(function() {showSukienketthuc(item, val, bBatdaucungsukientruoc, _index);}, val.iThoigianhienthi);
                break;
            case "HIDE":
                item.fadeOut(2000);
                setTimeout(function() {showSukienketthuc(item, val, bBatdaucungsukientruoc, _index);}, val.iThoigianhienthi);
                break;
            case "OPACITY":
                item.fadeTo(1500, 0.333);
                setTimeout(function() {showSukienketthuc(item, val, bBatdaucungsukientruoc, _index);}, val.iThoigianhienthi);
                break;
            case "SHOW":
                break;
            case "SMALL":
                item.animate({
                    width: "-10%",
                    opacity: 0.333,
                    fontSize: "18pt",
                }, 2000);
                setTimeout(function() {showSukienketthuc(item, val, bBatdaucungsukientruoc, _index);}, val.iThoigianhienthi);
                break;
        }//End switch
        //Hiển thị progress cho sự kiện slide
        $(".ui-progressbar-value").css("width", "0%");
        showProgressbar(val.iThoigianhienthi);
    }
    /*
    *Hiện progressbar cho từng sự kiện
    */
    function showProgressbar(_milisecond)
    {
        var iSecond = 0;
        var iComplete = 0;
        interval = setInterval(function() {
            iSecond += 1000;
            iComplete = Math.round((iSecond * 100)/_milisecond);
            if(iSecond >= _milisecond || iComplete >= 100)
            {
                clearInterval(interval);
                $(".ui-progressbar-value").css("width", "100%");
                return;
            }
            $(".ui-progressbar-value").css("width", iComplete + "%");
        }, 1000);
    }
    /*
    *Hiện sự kiện kết thúc
    */
    function showSukienketthuc(_item, _val, _bBatdaucungsukientruoc, _index)
    {
        var item = _item;
        switch (_val.FK_sDanhmucsukienkethucID) {
            case "BIG":
                item.animate({
                    width: "10%",
                    fontSize: "18pt",
                }, 2000);
                break;
            case "FADEIN":
                item.fadeIn(2500);
                break;
            case "HIDE":
                item.fadeOut(2000);
                break;
            case "OPACITY":
                item.fadeTo(1500, 0.333);
                break;
            case "SHOW":
                break;
            case "SMALL":
                item.animate({
                    width: "-10%",
                    fontSize: "11pt",
                }, 2000);
                break;
        }
        $(".ui-progressbar-value").css("width", "0%"); //Xóa progressbar
        --iLstSukienslideCount; //Giảm số lượng sự kiện đã hiển thị đi
        //Kiểm tra đã phải sự kiện cuối cùng chưa
        if(iLstSukienslideCount <= 0)
        {
            iSelectedTrangslide += 1; //Chuyển sang slide kế
            if(arrTrangslide[iSelectedTrangslide] != null)
            {
                showSelectedTrangslide(iSelectedTrangslide);
                var PK_iTrangslideID = arrTrangslide[iSelectedTrangslide].PK_iTrangslideID;
		        getSukienslideByFK_iTrangslideID(PK_iTrangslideID);
            }
        }
        //Nếu không bắt đầu cùng sự kiện trước thì phải kích hoạt sự kiện tiếp theo
        if(_bBatdaucungsukientruoc == false && bPause == false)
        {
            showSukienslide(_index + 1);
        }
    }
    
    /*
    *Hàm hiển thị trang slide theo ID
    */
    function showSelectedTrangslide(){
        $("#page-number").text("Trang " + parseInt(iSelectedTrangslide + 1) + " / " + arrTrangslide.length);
        $("#header-slide").text(arrTrangslide[iSelectedTrangslide].sTieude);
        $(".slide-active").removeClass("slide-active");
        $(".slide:eq("+ iSelectedTrangslide +")").addClass("slide-active");
    }
    /*
    *Đặt div nằm chính giữa màn hình
    */
    function setDivCenter() {
        var windHeight = $(window).height();
        var windWidth = $(window).width();
        var divHeight = $('#screen-slide').height();
        var divWidth = $('#screen-slide').width();
        var offsetX = parseInt((parseInt(windHeight) - parseInt(divHeight))/2);
        var offsetY = parseInt((parseInt(windWidth) - parseInt(divWidth))/2);
        $('#screen-slide').css('top', offsetX);
        $('#screen-slide').css('left', offsetY);
    }
    /*
    *Khởi tạo sự kiện khi click vào trang slide tương ứng
    */
    function initClickTrangslide() {
        var lstDivTrangslide = $(".slide");
        $.each(lstDivTrangslide, function (i, val) {
            $(".slide:eq(" + i + ")").bind('click',
		        function () {
                    iSukienslideIndex = 0;
		            var PK_iTrangslideID = parseInt($(".slide:eq(" + i + ")").attr("rel"));
                    iSelectedTrangslide = i;
                    showSelectedTrangslide(iSelectedTrangslide);
		            getSukienslideByFK_iTrangslideID(PK_iTrangslideID);
		        });
        });
    }
    /*
    *Hiển thị video tương ứng với slide
    */
    function showVideoByPK_iSlideID(PK_iSlideID)
    {
        varType = "POST";
        varUrl = URL_DOTNET_SERVICE + "SlideGetByPK/" + PK_iSlideID;
        varContentType = "application/json; charset=utf-8";
        varDataType = "json";
        varProcessData = true;
        sCallType = "Slide";
        CallService(); //Gọi service để lấy danh sách trang slide
    }

    /*
    *Hàm điểm danh
    *Gửi thông tin người dùng, khóa học, trang slide đang xem lên server để phục vụ việc điểm danh
    */
    function diemDanh(_FK_iHocvienID, _FK_iKhoahocID, _FK_iTrangslideID)
    {
        var oDiemdanh = new Diemdanh(0, _FK_iKhoahocID, _FK_iHocvienID, _FK_iTrangslideID, 1, new Date());
        //Cấu hình thông tin để gọi Ajax
        varType = "POST";
        varUrl = URL_DOTNET_SERVICE + "DiemdanhInsert";
        varData = JSON.stringify(oDiemdanh);
        //varData = varData.replace(/"/g, '\\\"');
        varContentType = "application/json; charset=utf-8";
        varDataType = "json";
        varProcessData = false;
        sCallType = "Diemdanh";
        CallService(); //Gọi service
    }

    function replacer(key, value) {
        if (typeof value === 'number' && !isFinite(value)) {
            return String(value);
        }
        if (typeof value === 'string') {
            var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
              if (a) {
                var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
                return "\\/Date("+ utcMilliseconds +")\\/";
//                return new Date(utcMilliseconds);
              }
        }
        return value;
    }

    /*
    *Các hàm thực hiện khi trang được load
    */
    $(document).ready(function () {
//        //Load slide
//        if(FK_iSlideID != null && FK_iSlideID > 0)
//        {
//            showVideoByPK_iSlideID(FK_iSlideID); //Hiển thị video
//            bPause = false;
//            $("#play-btn").text("Tạm dừng");
//        }
//        else
//        {
//            viewSlide.text("");
//            //$("<br/><br/><br/><br/><br/><center><h1 style='color:red;'>Không tồn tại slide này!</h1></center>").appendTo(viewSlide);
//        }
        //Tạo thanh progessbar
        progressbar = $("#progressbar" ).progressbar({
			value: 1
		});
        //Xử lý nhấn vào trang slide và hiển thị trang slide tương ứng
        $("#btnNext").click(function () {
            if(iSelectedTrangslide < arrTrangslide.length)
            {
                iSelectedTrangslide += 1; //Chuyển sang slide kế
                if(arrTrangslide[iSelectedTrangslide] != null)
                {
                    showSelectedTrangslide(iSelectedTrangslide);
                    var PK_iTrangslideID = arrTrangslide[iSelectedTrangslide].PK_iTrangslideID;
		            getSukienslideByFK_iTrangslideID(PK_iTrangslideID);
                }
            }
        });
        $("#btnPrev").click(function () {
            if(iSelectedTrangslide > 1)
            {
                iSelectedTrangslide--; //Chuyển về slide sau
                if(arrTrangslide[iSelectedTrangslide] != null)
                {
                    showSelectedTrangslide(iSelectedTrangslide);
                    var PK_iTrangslideID = arrTrangslide[iSelectedTrangslide].PK_iTrangslideID;
		            getSukienslideByFK_iTrangslideID(PK_iTrangslideID);
                }
            }
        });
        
        //Xử lý nút play/pause
        $("#play-btn").click(function () {
            if(bPause == true)
            {
                player.resume(); //Tiếp tục video
            }
            else
            {
                player.pause(); //Dừng video
            }
        });
    });